/*
 *  Created on: May 12, 2009
 *      Author: Ramesh Rajaby
 */

#ifndef _COMPOSER_PARSING_UTILS_H_
#define _COMPOSER_PARSING_UTILS_H_

#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>

using namespace std;
using namespace boost;
using namespace algorithm;

namespace SymphonyAST {


bool isValidInWord(char c);

string getNextWord(const string& s, int& start);
string getFirstWord(const string& s);

string substring(const string& str, int start, int end);

bool isValidWord(string& word);

int lookForOpeningRoundBracket(string& s, int start);
int lookForOpeningSquareBracket(string& s, int start);
int lookForClosingRoundBracket(string& s, int start);
int lookForClosingSquareBracket(string& s, int start);

string getNextParameter(string& s, int& start);

int findExcludingBracketsAndConsts(string& s, const string& toFind, int start);
int rfindExcludingBracketsAndConsts(string& s, const string& toFind, int start);

char rgetNextNonWhiteChar(string& exp, int start);

bool startsWith(const string& s, const string& start);

bool isAssignmentOp(string op);

/* check */
void checkLValue(string lvalue);

}

#endif
